<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>生成器函数实例2</title>
  </head>
  <body>
    <script>
      // 模拟获取 用户数据 订单数据 商品数据
      function getUsers() {
        setTimeout(() => {
          let data = "用户数据";
          // 调用next 方法，并且将数据传入
          iterator.next(data);
          // 第二次调用next方法传入实参将作为第一个yield的返回值
        }, 1000);
      }

      function getOrders() {
        setTimeout(() => {
          let data = "订单数据";
          // 第三次调用next方法传入实参作为第二个yield的返回值
          iterator.next(data);
        }, 1000);
      }

      function getGoods() {
        setTimeout(() => {
          let data = "商品数据";
          iterator.next(data);
        }, 1000);
      }

      // 声明一个生成器函数
      function* gen() {
        // 接收第一个yield的返回值(为第二个next方法传入的参数)
        let users = yield getUsers();
        console.log(users);
        // 接收订单数据
        let orders = yield getOrders();
        console.log(orders);
        let goods = yield getGoods();
        console.log(goods);
      }

      // 调用生成器函数生成一个迭代器对象
      let iterator = gen();

      iterator.next(); // 调用迭代器对象的next方法
    </script>
  </body>
</html>
